当前位置:  开发笔记 > 编程语言 > 正文

|之间的区别 和|| 或&&和&&进行比较

如何解决《|之间的区别和||或&&和&&进行比较》经验,为你挑选了3个好方法。

在C(和其他语言可能)单个|或是&按位比较.
双重||或是&&逻辑比较.
编辑:请务必阅读下面关于"没有短路"的Mehrdad评论

在实践中,由于true通常等同于1并且false通常等效0,因此按位比较有时可以是有效的并且返回完全相同的结果.

曾经有一个关键任务软件组件,我运行了一个静态代码分析器,它指出在逻辑比较应该使用的位比较.由于它是用C语言编写的,并且由于逻辑比较的安排,因此软件可以正常工作.例:

if ( (altitide > 10000) & (knots > 100) )
...

在C#(强类型语言)中使用| 和&on布尔变量将导致"逻辑或/和无w/o短路". (22认同)

C#行为的一个例子是"if((o!= null)&(o.Property == 1))"将抛出NullReferenceException,因为即使o为null,它仍会尝试计算o.Property的值."if((o!= null)&&(o.Property == 1))"不会抛出异常,因为如果o == null,它将不会尝试评估o.Property. (9认同)


Richard Dunl.. 29

&和| 是按位运算符,可以对整数和布尔参数以及&&和||进行操作 是逻辑运算符,只能在布尔参数上运行.在许多语言中,如果两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&&的情况下,如果第一个参数参数是假的,第二个参数是无关紧要的).



1> dustmachine..:

在C(和其他语言可能)单个|或是&按位比较.
双重||或是&&逻辑比较.
编辑:请务必阅读下面关于"没有短路"的Mehrdad评论

在实践中,由于true通常等同于1并且false通常等效0,因此按位比较有时可以是有效的并且返回完全相同的结果.

曾经有一个关键任务软件组件,我运行了一个静态代码分析器,它指出在逻辑比较应该使用的位比较.由于它是用C语言编写的,并且由于逻辑比较的安排,因此软件可以正常工作.例:

if ( (altitide > 10000) & (knots > 100) )
...


在C#(强类型语言)中使用| 和&on布尔变量将导致"逻辑或/和无w/o短路".
C#行为的一个例子是"if((o!= null)&(o.Property == 1))"将抛出NullReferenceException,因为即使o为null,它仍会尝试计算o.Property的值."if((o!= null)&&(o.Property == 1))"不会抛出异常,因为如果o == null,它将不会尝试评估o.Property.

2> Richard Dunl..:

&和| 是按位运算符,可以对整数和布尔参数以及&&和||进行操作 是逻辑运算符,只能在布尔参数上运行.在许多语言中,如果两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&&的情况下,如果第一个参数参数是假的,第二个参数是无关紧要的).


upvote首先提到布尔运算符的短路

3> David..:

&和| 是||的二元运算符 和&&是布尔值.

差异很大:
(1&2)为0,false
(1 && 2)为真


最初的问题没有提到C#.之后进行了编辑.
(1 && 2)是无效的C#语法.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有